/*
 * Create in 2013-4-16 上午10:07:29.
 */
package kit4j.app.notepad.ui.menu;

import java.awt.Menu;

import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;

import kit4j.app.notepad.config.NotepadConfig;
import kit4j.app.notepad.ui.window.Notepad;

/**
 * 
 * @author MiniKnife
 *
 */
public class NotepadMenu extends Menu {

	private static final long serialVersionUID = 1L;

	private Notepad notepad;

	private int notepadIndex;

	private DocumentListener notepadDocListener;

	public NotepadMenu(NotepadConfig config, Notepad notepad, int notepadIndex) {
		initListener();
		setNotepad(notepad);
		setNotepadIndex(notepadIndex);
		initLabel();
		initMenuItem(config);
	}
	
	/**
	 * @return the notepad
	 */
	public Notepad getNotepad() {
		return notepad;
	}
	
	/**
	 * @param notepad
	 *            the notepad to set
	 */
	public void setNotepad(Notepad notepad) {
		if (this.notepad != notepad) {
			if (this.notepad != null) {
				this.notepad.getTextArea().getDocument().removeDocumentListener(notepadDocListener);
			}
			
			this.notepad = notepad;
			
			if (notepad != null) {
				notepad.getTextArea().getDocument().removeDocumentListener(notepadDocListener);
				notepad.getTextArea().getDocument().addDocumentListener(notepadDocListener);
				initLabel();
			}
		}
	}
	
	/**
	 * @return the notepadIndex
	 */
	public int getNotepadIndex() {
		return notepadIndex;
	}
	
	/**
	 * @param notepadIndex
	 *            the notepadIndex to set
	 */
	public void setNotepadIndex(int notepadIndex) {
		this.notepadIndex = notepadIndex;
		initLabel();
	}

	private void initListener() {
		notepadDocListener = new DocumentListener() {

			@Override
			public void removeUpdate(DocumentEvent e) {
				initLabel();
			}

			@Override
			public void insertUpdate(DocumentEvent e) {
				initLabel();
			}

			@Override
			public void changedUpdate(DocumentEvent e) {
			}
		};
	}
	
	private void initLabel() {
		StringBuilder label = new StringBuilder();
		label.append(getNotepadIndex()).append(". ");
		String text = notepad != null ? notepad.getTextArea().getText() : null;
		
		if (text != null && text.length() > 4) {
			text = text.substring(0, 3) + "..";
		}
		label.append(text);
		
		setLabel(label.toString());
	}
	
	/**
	 * 
	 */
	private void initMenuItem(NotepadConfig config) {
		add(new ShowNotepadMenuItem(config, getNotepad()));
		add(new ShowNotepadInCenterMenuItem(config, getNotepad()));
	}
}
